Arbeiten mit Branches / Tags

Branches
 
Im unterschied zu manch anderen Versionskontrollsystemen sind Branches und Tags in Subversion zunächst einmal nicht mehr als gewöhnliche Verzeichnisse. Subversion speichert zu jeder Datei und jedem Verzeichnis zusätzliche Metainformationen, die informationen über aktuelle Version, Änderungsdatum und so weiter enthalten.
Durch diese einfache Struktur lässt sich Subversion auch Programmierneulingen einfach und schnell erlernen. Diese Struktur hat jedoch auch ihre Tücken, etwa wenn man versucht, einen Branch vom Root des Repositories zu erstellen. Da ein Branch ja ein Unterverzeichnis vom Wurzelverzeichnis ist (also etwa branches/neuerbranch), würde er auch alle anderen Branches (branches/*), inklusive sich selbst enthalten.
Wenn man in Subversion einen neuen Branch anlegt, ist dies also zunächst einmal nicht mehr als eine Kopie eines vorhandenen Verzeichnisses (=alten Branches).
 
Branch erstellen
 
Die einfachste und eleganteste Möglichkeit einen Branch zu erstellen ist, mit dem SVN Kommandozeilentool den Server anzuweisen dies zu erledigen.

$ svn copy https://svn.mni.fh-giessen.de/eStudy/branches/ecom \
https://svn.mni.fh-giessen.de/eStudy/branches/ecom2000 \
- m "Branch von ecom erstellt."

Committed revision 1241.

In diesem Beispiel haben wir den Server angewiesen einen neuen Branch namens ecom2000 als Kopie vom Branch ecom zu erstellen. Der neu angelegte Branch kann anschkießend ausgecheckt und verwendet werden (siehe Kapitel Checkout).

Es gibt noch eine weitere Möglichkeite einen neuen Branch annzulegen, indem man sich zunächst eine lokale Kopie des alten Branches auf dem Rechner anlegt. Im 2. Beispiel wird eine lokale Kopie des Branches ecom im lokalen Verzeichnis ecom2000 erstellt, bevor der Branch Serverseitig erstellt wird. Das Verzeichnis wird dabei automatisch angelegt, falls es noch nicht vorhanden sein sollte:

$ svn checkout https://svn.mni.fh-giessen.de/eStudy/branches/ecom ecom2000
A
ecom2000/VerzeichnisX/
A
com2000/DateiY.z
A
ecom2000/...

Checked out revision 340.
Erst jetzt wird der eigentliche Branch auf dem Server erstellt: 
svn copy branches/ecom branches/ecom2000
cd ecom2000
svn status

A + branches/ecom2000
Anschließend muss noch ein Commit ausgeführt werden, um die Änderungen zu bestätigen:
$ svn commit -m "Erzeuge Branch ecom2000 von branches/ecom"
Adding branches/ecom2000

Committed revision 341.
Wie unschwer zu erkennen ist, ist die zweite Variante umständlicher. Diese Vorgehensweise hat außerdem einen weiteren Nachteil, wenn man in einem Projekt mit mehreren Beteiligten und unterschiedlichen Entwicklungsumgebungen arbeitet. Dadurch das zunächst eine lokale Arbeitskopie des Ursprünglichen Branches geholt wird, ergibt sich die Gefahr, dass noch vor dem Anlegen des neuen Branches Dateien geändert wurden. Das kann beispielsweise dann passieren, wenn in der Entwicklungsumgebung eine unterschiedliche Textkodierung eingestellt wurde. Die elegantere und bessere Möglichkeit ist daher, wie im 1. Beispiel vorzugehen und erst nach dem Anlegen des Repositories einen frischen Checkout des neuen Repositories zu machen.
 
Authentifizierung
 
Um auf einen Branch zugreifen zu können, muss man in Subversion praktischerweise nicht mit Kommandozeilenparametern hantieren. Stattdessen kann der Zugreif auf ein Verzeichnis im Repository über den HTTP Authentifizierungsmechanismus des Web Servers realisiert werden.